import { Translation, TranslationStatistics } from './translation';

// 语言目录配置
export interface LanguageConfig {
  language: string; // 语言代码，如 'en', 'zh-CN'
  sourcePath: string; // 资源路径，可以是文件或目录
  format?: string; // 文件格式，如 'xml', 'json', 'java', 'ts', 'properties'
  encoding?: string; // 文件编码
  excludePatterns?: string[]; // 排除模式
}

interface TranslationConfig {
  rootDir: string; // 扫码根目录
  excludeDirs?: string[]; // 排除目录
  resourcePaths: LanguageConfig[]; // 资源文件路径列表
  apiUrl?: string; // 语言包 API 地址
}

// 任务配置接口
export interface ExtractionTask {
  taskId: string; // 任务唯一标识
  projectId: string; // 项目ID
  version: string; // 版本号
  languages: string[]; // 目标语言列表
  sourcePaths: string[]; // 源码路径
  excludePatterns?: string[]; // 排除模式
  outputFormat: 'json' | 'xml' | 'yaml'; // 输出格式
  callbackUrl?: string; // 回调地址
  priority?: number; // 任务优先级
  timeout?: number; // 超时时间
  // 仓库配置
  gitConfig: {
    repository: string; // Git 仓库地址
    branch: string; // 要克隆的分支名称
    username?: string; // Git 用户名（可选，用于身份验证）
    token?: string; // 访问令牌（可选，用于身份验证）
    sshKey?: string; // SSH 密钥（可选，用于 SSH 身份验证）
    clonePath?: string; // 本地克隆路径（可选，默认使用仓库名）
    updateStrategy?: 'clone' | 'pull'; // 仓库更新策略（可选，默认为 'clone'）
  };
  // 翻译文件配置
  translationConfig: {
    // 扫码配置
    scan: {
      defaultLocale: string; // 默认语言
      maxDepth?: number; // 最大扫描深度
      apiUrl?: string; // 语言包 API 地址
    };
    // Android 翻译文件配置
    android?: TranslationConfig;
    // iOS 翻译文件配置
    ios?: TranslationConfig;
    // Web 翻译文件配置
    web?: TranslationConfig;
  };
  // 解析器配置
  parserConfig?: Array<{
    type: string;
    parser: string;
    options: Record<string, any>;
  }>;
  // 分析配置
  analysisConfig?: {
    // 翻译键分析配置
    keyAnalysis?: {
      frequencyThreshold?: number; // 使用频率阈值
      contextAnalysis?: boolean; // 是否分析上下文
      moduleAnalysis?: boolean; // 是否分析模块
      tagAnalysis?: boolean; // 是否分析标签
    };
    // 覆盖率分析配置
    coverageAnalysis?: {
      languageCoverage?: boolean; // 是否分析语言覆盖率
      moduleCoverage?: boolean; // 是否分析模块覆盖率
      scenarioCoverage?: boolean; // 是否分析场景覆盖率
    };
    // 质量分析配置
    qualityAnalysis?: {
      duplicateCheck?: boolean; // 是否检查重复
      namingCheck?: boolean; // 是否检查命名
      contextCheck?: boolean; // 是否检查上下文
    };
    // 分类器规则配置
    classifierRules?: {
      [key: string]: any;
    };
  };
  // 报告配置
  reportConfig?: {
    format: 'json' | 'html' | 'pdf'; // 报告格式
    sections?: string[]; // 报告章节
    charts?: string[]; // 图表类型
    exportPath?: string; // 导出路径
    template?: string; // 自定义模板
  };
  // 通知配置
  notificationConfig?: {
    type: 'webhook' | 'email' | 'slack'; // 通知类型
    recipients: string[]; // 接收者
    events: string[]; // 通知事件
    template?: string; // 通知模板
  };
}

// 解析器配置接口
export interface ParserConfig {
  type: 'android' | 'ios' | 'web' | 'java';
  parser: string; // 解析器名称
  options: {
    includeComments: boolean; // 是否包含注释
    extractContext: boolean; // 是否提取上下文
    maxDepth: number; // 最大解析深度
    ignorePatterns: string[]; // 忽略模式
    keyPatterns: string[]; // 键名匹配模式
    valuePatterns: string[]; // 值匹配模式
    customRules: CustomRule[]; // 自定义规则
  };
}

// 分析配置接口
export interface AnalysisConfig {
  // 翻译键分析配置
  keyAnalysis: {
    frequencyThreshold: number; // 使用频率阈值
    contextAnalysis: boolean; // 是否分析上下文
    moduleAnalysis: boolean; // 是否分析模块
    tagAnalysis: boolean; // 是否分析标签
  };
  // 覆盖率分析配置
  coverageAnalysis: {
    languageCoverage: boolean; // 是否分析语言覆盖率
    moduleCoverage: boolean; // 是否分析模块覆盖率
    scenarioCoverage: boolean; // 是否分析场景覆盖率
  };
  // 质量分析配置
  qualityAnalysis: {
    duplicateCheck: boolean; // 是否检查重复
    namingCheck: boolean; // 是否检查命名
    contextCheck: boolean; // 是否检查上下文
  };
}

// 报告配置接口
export interface ReportConfig {
  format: 'json' | 'excel' | 'html'; // 报告格式
  sections: string[]; // 报告章节
  charts: string[]; // 图表类型
  exportPath: string; // 导出路径
  template?: string; // 自定义模板
}

// 通知配置接口
export interface NotificationConfig {
  type: 'email' | 'webhook' | 'message'; // 通知类型
  recipients: string[]; // 接收者
  events: string[]; // 通知事件
  template?: string; // 通知模板
}

// 自定义规则接口
export interface CustomRule {
  name: string; // 规则名称
  pattern: string; // 匹配模式
  action: 'include' | 'exclude' | 'transform'; // 规则动作
  params?: Record<string, any>; // 规则参数
}

// 提取结果接口 - 定义翻译提取任务完成后的结果数据结构
export interface ExtractionResult {
  taskId: string; // 任务唯一标识符
  status: 'success' | 'failed' | 'running'; // 任务执行状态
  startTime: string; // 任务开始时间
  endTime: string; // 任务结束时间
  statistics: {
    totalFiles: number; // 扫描的文件总数
    processedFiles: number; // 成功处理的文件数
    extractedKeys: number; // 提取的翻译键总数
    errors: number; // 处理过程中的错误数
    processingTime: number; // 处理耗时(毫秒)
  };
  translations: Translation[]; // 提取的翻译条目列表
  analysis: {
    coverage: {
      overall: number; // 整体翻译覆盖率(0-1)
      byLanguage: Record<string, number>; // 各语言的翻译覆盖率
      byModule: Record<string, number>; // 各模块的翻译覆盖率
      missingKeys: string[]; // 没有有效翻译的键
      redundantKeys: string[]; // 已定义但未使用的键
    };
    usage: {
      highFrequency: string[]; // 高频使用的翻译键
      lowFrequency: string[]; // 低频使用的翻译键
      unusedKeys: string[]; // 未使用的翻译键
    };
    modules: Record<
      string,
      {
        keyCount: number; // 模块包含的翻译键数量
        usageFrequency: number; // 模块翻译键的使用频率
        coverage: number; // 模块的翻译覆盖率
      }
    >;
    quality: {
      duplicates: string[]; // 重复的翻译键列表
      namingIssues: string[]; // 命名不规范的翻译键
      contextIssues: string[]; // 上下文不明确的翻译键
    };
  };
  errors: Array<{
    file: string; // 发生错误的文件路径
    message: string; // 错误信息描述
  }>;
  suggestions: string[]; // 系统提供的优化建议列表
}
